home *** CD-ROM | disk | FTP | other *** search
- /*
- * PPPDUMP.C
- *
- * 12-89 -- Katie Stevens (dkstevens@ucdavis.edu)
- * UC Davis, Computing Services
- * PPP.08 05-90 [ks] improve tracing reports
- * PPP.09 05-90 [ks] add UPAP packet reporting
- * PPP.14 08-90 [ks] change UPAP to PAP for consistency with RFC1172
- * PPP.15 09-90 [ks] update to KA9Q NOS v900828
- * Jan 91 [Bill Simpson] small changes to match rewrite of PPP
- * Aug 91 [Bill Simpson] fixed some buffer loss
- */
- #include "global.h"
- #ifdef PPP
- #include "mbuf.h"
- #include "iface.h"
- #include "ppp.h"
- #include "trace.h"
-
- #if !defined(_lint)
- static char rcsid[] OPTIONAL = "$Id: pppdump.c,v 1.10 1996/08/29 12:11:16 root Exp root $";
- #endif
-
-
- /* dump a PPP packet */
- void
- ppp_dump (fp, bpp, unused)
- FILE *fp;
- struct mbuf **bpp;
- int unused OPTIONAL;
- {
- struct ppp_hdr hdr;
- struct mbuf *tbp;
-
- traceprintf (fp, "PPP: len %3u\t", len_p (*bpp));
-
- /* HDLC address and control fields may be compressed out */
- if ((byte_t) (*bpp)->data[0] != HDLC_ALL_ADDR) {
- traceprintf (fp, "(compressed ALL/UI)\t");
- } else if ((byte_t) (*bpp)->data[1] != HDLC_UI) {
- traceprintf (fp, "(missing UI!)\t");
- } else {
- /* skip address/control fields */
- (void) pull16 (bpp);
- }
-
- /* Initialize the expected header */
- hdr.addr = HDLC_ALL_ADDR;
- hdr.control = HDLC_UI;
- hdr.protocol = (int16) PULLCHAR (bpp);
-
- /* First byte of PPP protocol field may be compressed out */
- if (hdr.protocol & 0x01)
- traceprintf (fp, "compressed ");
- else {
- hdr.protocol = (int16) ((hdr.protocol << 8) | PULLCHAR (bpp));
-
- /* Second byte of PPP protocol field must be odd */
- if (!(hdr.protocol & 0x01))
- traceprintf (fp, "(not odd!) ");
- }
-
- traceprintf (fp, "protocol: ");
- switch (hdr.protocol) {
- case PPP_IP_PROTOCOL:
- traceprintf (fp, "IP\n");
- ip_dump (fp, bpp, 1);
- break;
- case PPP_IPCP_PROTOCOL:
- traceprintf (fp, "IPCP\n");
- break;
- case PPP_LCP_PROTOCOL:
- traceprintf (fp, "LCP\n");
- break;
- case PPP_PAP_PROTOCOL:
- traceprintf (fp, "PAP\n");
- break;
- case PPP_COMPR_PROTOCOL:
- traceprintf (fp, "VJ Compressed TCP/IP\n");
- vjcomp_dump (fp, bpp, 0);
- break;
- case PPP_UNCOMP_PROTOCOL:
- traceprintf (fp, "VJ Uncompressed TCP/IP\n");
- /* Get our own copy so we can mess with the data */
- if (bpp && (tbp = copy_p (*bpp, len_p (*bpp))) == NULLBUF)
- return;
-
- traceprintf (fp, "\tconnection 0x%02x\n",
- tbp->data[9]); /* FIX THIS! */
- /* Restore the bytes used with Uncompressed TCP */
- tbp->data[9] = TCP_PTCL; /* FIX THIS! */
- ip_dump (fp, &tbp, 1);
- free_p (tbp);
- break;
- default:
- traceprintf (fp, "unknown 0x%04x\n", hdr.protocol);
- break;
- }
- }
-
-
- #endif /* PPP */
-